#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>

void ulamki(char *w, float *ulamkowa, int m, int rozmiar, int *ul, int znaki,char *l, int z);
void calkowite(char *w, int *calkowita, int *m, int rozmiar);
void rozdzielic(int *calkowita, float *ulamkowa, char *l, int *znaki, int *z);
int main(int argc, char *argv[]) {
	if(argc<3)
		printf("za malo danych\n");
	else{
		if(isdigit(*argv[2])==0)
			printf("podano zle przyblizenie\n");
		else{
			char *l = argv[1];
			printf("%s\n", l);
			int calkowita=0;
			float ulamkowa=0.0;
			int znaki;
			int z;
			rozdzielic(&calkowita,&ulamkowa,l,&znaki,&z);
			//printf("%d\n%f\n", calkowita, ulamkowa);
			int zaokraglenie = atoi(argv[2])+1;
			char wynik[zaokraglenie];
			char *w = &wynik[0];
			int m=0;
			calkowite(w,&calkowita,&m,zaokraglenie);
			//printf("%c\n", wynik[0]);
			//m++;
			//char kropka = 'a';
			//wynik[m]=kropka;
			//printf("%s\n", wynik);
			int i;
			//if(calkowita==0)
				//k--;
			//printf("%d z\n", znaki);
			int ulam[znaki];
			int *ul = &ulam[0];
			ulamki(w,&ulamkowa,m,zaokraglenie,ul,znaki,l,z);
			//printf("%d\n", ulam[0]);
			//printf("\n%s\n", wynik);
			//printf("\n\n\n");
			for(i=0; i<zaokraglenie; i++){
				if(i==m)
					printf(".");
				printf("%c", wynik[i]);
			}
			printf("\n");
		}
	}

	return 0;
}
void rozdzielic(int *calkowita, float *ulamkowa, char *l, int *znaki, int *z){
	int dlugosc = strlen(l);
	//printf("%d\n", dlugosc);
	int i;
	int k=0;
	for(i=0; i<dlugosc; i++){
		if(l[i]=='.')
			break;
		(*calkowita)=(*calkowita)*10+l[i]-48;
			k++;
	}
	*znaki=strlen(l)-k;
	*z=k;
	//printf("%d\n", k);
	for(i=k+1; i<dlugosc; i++)
		(*ulamkowa)=(*ulamkowa)*10+l[i]-48;
	for(i=k+1; i<dlugosc; i++)
		(*ulamkowa)/=10;
}
void calkowite(char *w, int *calkowita, int *m, int rozmiar){
	int k=0;
	if(*calkowita==0){
		w[k]='0';
		k++;
		*m=k;
	}
	else{
		char pomocnicza[rozmiar];
		int i=0;
		int c=*calkowita;
		//printf("\n%d\n", c);
	
		while(c>0){
			int temp = c & 1;
			if(temp)
				pomocnicza[rozmiar-1-k] = '1';
			else
				pomocnicza[rozmiar-1-k] = '0';
			k++;
			c=c>>1;
		}
		//printf("%s\n%d\n", pomocnicza, k);
		//printf("%c\n", pomocnicza[rozmiar-k]);
		k++;
		w[k]='.';
		*m=k;
		while((rozmiar-k)<rozmiar){
			w[i]=pomocnicza[rozmiar-k];
			k--;
			i++;
		}
	}
}
void ulamki(char *w, float *ulamkowa, int m, int rozmiar, int *ul, int znaki, char*l, int z){
	ul[0]=0;
	int dlugosc = strlen(l);
	int i, j;
	int o=1;
	for(i=z+1; i<dlugosc; i++){
		ul[o]=l[i]-48;
		o++;
	}
	/*for(i=0; i<znaki; i++)
		printf("%d",ul[i]);
	printf("p\n");*/
	//float u=*ulamkowa;
	for(i=m; i<rozmiar; i++){
		int przeniesienie=0;
		for(j=znaki-1; j>=0; j--){
			int mnoz;
			mnoz=ul[j]*2+przeniesienie;
			//printf("%dul ", mnoz);
			ul[j]=mnoz%10;
			przeniesienie=mnoz/10;
		}
		if(ul[0]==1){
			w[i]='1';
			ul[0]=0;
		}
		else
			w[i]='0';
		/*u=u*2;
		if(u>=1.0){
			w[i]='1';
			u=u-1.0;
		}
		else
			w[i]='0';*/
		//printf("%c\n", i);
	}
}
